package cn.com.dhcc.turbo.service.registry;

import java.util.List;

import org.springframework.stereotype.Service;

import cn.com.dhcc.app.core.CM;
import cn.com.dhcc.app.core.exception.DaoException;
import cn.com.dhcc.app.core.exception.NiceException;
import cn.com.dhcc.app.core.tag.CommonStaticCode.SUCCESSFAIL;
import cn.com.dhcc.app.core.tag.CommonStaticCode.YESNO;
import cn.com.dhcc.app.pub.core.consts.NodeInfoParam;
import cn.com.dhcc.turbo.entity.registry.NodeInfo;
import cn.com.dhcc.turbo.entity.registry.NodePermission;
import cn.com.dhcc.turbo.service.registry.vo.RegistResult;

/**
 * 节点注册和管理权限管理
 * @author qiao
 * @2014-8-5 @下午5:13:30
 */
@Service
public class NodeRegistryPermissionMgr{

	private static String regionCode =  NodeInfoParam.NODE_REGION_CODE;
	/**
	 * 当前节点是否管理节点 *****根据行政区编码判断
	 * 如果是管理节点：就能够进行节点的注册和关系的管理
	 * @param currentNode
	 * @return
	 * @throws NiceException 
	 */
	public RegistResult isManagerNode() throws NiceException{
		return isManagerNode(regionCode);
	}
	/**
	 * 是否管理节点
	 * 如果是管理节点：就能够进行节点的注册和关系的管理
	 * @param currentNode
	 * @return
	 * @throws NiceException 
	 */
	public RegistResult isManagerNode(String regionCode) throws NiceException{
		RegistResult registResult = new RegistResult();
		NodePermission nodePermission = getNodePermission(regionCode);
		if(nodePermission != null){
			if(YESNO.YES.getStatus().equals(nodePermission.getIsMgr())){
				registResult.setResult(SUCCESSFAIL.SUCCESS);
				if(nodePermission.getRegionCodesToMgr().equals("")){
					registResult.setMsg("无管理范围的节点");
				}
			}else{
				registResult.setResult(SUCCESSFAIL.FAIL);
			}
		}else{
			registResult.setResult(SUCCESSFAIL.FAIL);
		}
		return registResult;
	}
	/**
	 * 获取当前节点的管理节点列表,只有管理节点有
	 * @param currentNode
	 * @return
	 * @throws NiceException 
	 */
	public List<NodeInfo> getManagerNodes() throws NiceException{
		
		return null;
	}
	/**
	 * 获取当前节点能够监控的节点
	 * 如果是管理节点，监控需要管理管理范围的节点
	 * 如果不是管理节点，监控只监控和它有交换关系的节点
	 * @return
	 * @throws NiceException 
	 */
	public List<NodeInfo> getMonitorNodes() throws NiceException{
		if(YESNO.YES.getStatus().equals(isManagerNode(regionCode))){
			return getManagerNodes();
		}else{
			return getRelNodes();
		}
	}
	/**
	 * 获取当前节点有交换关系的节点
	 * @return
	 */
	public List<NodeInfo> getRelNodes() {
		return null;
	}
	/**
	 * 是否能够进行交换关系的建立的验证
	 * 
	 * @param fromNode
	 * @param fromNode
	 * @return
	 */
	public boolean canCreateRel(NodeInfo fromNode,NodeInfo toNode){
		return true;
	}
	
	public NodePermission getNodePermission(String regionCode) throws NiceException{
		try {
			return  CM.getDao().getModuleById("获取节点权限信息", NodePermission.class, new Object[]{regionCode});
		} catch (DaoException e) {
			throw new NiceException("获取节点权限信息失败!");
		}
	}
}
